#ifndef __ming_fyp_render_Texture_h__
#define __ming_fyp_render_Texture_h__

//------------------------------------------------------------------------------
// header includes
#include "fyp/core/tuple.h"

//------------------------------------------------------------------------------
namespace ming
{
namespace fyp
{
namespace render
{
	//--------------------------------------------------------------------------
	class ITexture
	{
	public:
		virtual ~ITexture() {}

		enum TFilterMode
		{
			POINT,
			LINEAR,
			ANISOTROPY
		};

		enum TAddressMode
		{
			WRAP,
			CLAMP
		};

		typedef tuple<TAddressMode, TAddressMode, TAddressMode> TAddressModeSettings;
		typedef tuple<TFilterMode, TFilterMode, TFilterMode> TFilterModeSettings;
		
		//------------------------------
		// external operations
		virtual void* GetApiTexture() = 0;
		virtual tuple<size_t, size_t> GetActualSize() = 0;

		virtual void SetAddressMode(TAddressMode u, TAddressMode v, TAddressMode w) = 0;
		virtual void SetFilterMode(TFilterMode minFilter, TFilterMode magFilter, TFilterMode mipFilter) = 0;
		
		virtual TAddressModeSettings GetAddressMode() = 0;
		virtual TFilterModeSettings GetFilterMode() = 0;
	};
	
	//--------------------------------------------------------------------------
}
}
}


#endif	//__ming_fyp_render_Texture_h__